home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / plugin / PluginRegistry.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  4.0 KB  |  142 lines

  1. package com.extensibility.plugin;
  2.  
  3. import com.extensibility.plugin.api.ApplicationAccess;
  4. import java.io.File;
  5. import java.lang.reflect.Method;
  6. import java.util.Enumeration;
  7. import java.util.Hashtable;
  8. import java.util.Vector;
  9.  
  10. public class PluginRegistry {
  11.    public static final int API_VERSION_1_1 = 65537;
  12.    public static final int API_VERSION_1_2 = 65538;
  13.    private int apiVersion = 0;
  14.    private Hashtable apiListing = new Hashtable();
  15.    private PluginClassLoader loader = new PluginClassLoader();
  16.    private static Class[] methodParams = new Class[]{Class.forName("com.extensibility.plugin.PluginRegistry")};
  17.    private static PluginRegistry globalRegistry = new PluginRegistry();
  18.    private ApplicationAccess appAccess = null;
  19.  
  20.    protected PluginRegistry() {
  21.       String var1 = System.getProperty("java.specification.version");
  22.       if (var1 == null) {
  23.          this.apiVersion = 65537;
  24.       } else {
  25.          Float var2 = new Float(var1);
  26.          this.apiVersion = (int)(var2 * (float)65536);
  27.       }
  28.  
  29.    }
  30.  
  31.    public static PluginRegistry getRegistry() {
  32.       return globalRegistry;
  33.    }
  34.  
  35.    public static void setRegistry(PluginRegistry var0) {
  36.       globalRegistry = var0;
  37.    }
  38.  
  39.    public void registerPluginsInFolder(File var1) {
  40.       if (var1.isDirectory()) {
  41.          String[] var2 = var1.list(new 1((PluginRegistry)null));
  42.          Vector var3 = this.loadJars(var1, var2);
  43.          this.callMainClasses(var3);
  44.       }
  45.    }
  46.  
  47.    public boolean registerPlugin(String var1, Class var2, String var3, int var4) {
  48.       if (var4 > this.apiVersion) {
  49.          return false;
  50.       } else {
  51.          Object var5 = this.apiListing.get(var1);
  52.          Vector var6;
  53.          if (var5 == null) {
  54.             var6 = new Vector();
  55.             this.apiListing.put(var1, var6);
  56.          } else {
  57.             var6 = (Vector)var5;
  58.          }
  59.  
  60.          var6.addElement(var2);
  61.          return true;
  62.       }
  63.    }
  64.  
  65.    public int getPluginApiCount(String var1) {
  66.       Object var2 = this.apiListing.get(var1);
  67.       int var3 = 0;
  68.       if (var2 != null) {
  69.          Vector var4 = (Vector)var2;
  70.          var3 = var4.size();
  71.       }
  72.  
  73.       return var3;
  74.    }
  75.  
  76.    public Object getNthPlugin(String var1, int var2) {
  77.       Object var3 = this.apiListing.get(var1);
  78.       Object var4 = null;
  79.       if (var3 != null) {
  80.          Vector var5 = (Vector)var3;
  81.          Class var6 = (Class)var5.elementAt(var2);
  82.  
  83.          try {
  84.             if (var6 != null) {
  85.                var4 = var6.newInstance();
  86.             }
  87.          } catch (Exception var8) {
  88.          }
  89.       }
  90.  
  91.       return var4;
  92.    }
  93.  
  94.    public ApplicationAccess getAppAccess() {
  95.       return this.appAccess;
  96.    }
  97.  
  98.    public void setAppAccess(ApplicationAccess var1) {
  99.       this.appAccess = var1;
  100.    }
  101.  
  102.    protected void callMainClasses(Vector var1) {
  103.       Enumeration var2 = var1.elements();
  104.  
  105.       while(var2.hasMoreElements()) {
  106.          String var3 = (String)var2.nextElement();
  107.  
  108.          try {
  109.             Class var4 = this.loader.loadClass(var3, true);
  110.             Method var5 = var4.getDeclaredMethod("registerPlugin", methodParams);
  111.             Object[] var6 = new Object[]{this};
  112.             var5.invoke((Object)null, var6);
  113.          } catch (LinkageError var7) {
  114.          } catch (Exception var8) {
  115.          }
  116.       }
  117.  
  118.    }
  119.  
  120.    protected Vector loadJars(File var1, String[] var2) {
  121.       Vector var3 = new Vector();
  122.       var3.ensureCapacity(var2.length);
  123.  
  124.       for(int var4 = 0; var4 < var2.length; ++var4) {
  125.          File var5 = new File(var1, var2[var4]);
  126.          String var6 = null;
  127.          if (var5.isFile()) {
  128.             try {
  129.                var6 = this.loader.enumerateClasses(var5);
  130.             } catch (Exception var8) {
  131.             }
  132.          }
  133.  
  134.          if (var6 != null) {
  135.             var3.addElement(var6);
  136.          }
  137.       }
  138.  
  139.       return var3;
  140.    }
  141. }
  142.